package com.example.js_interaction.netweb;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

import com.example.js_interaction.R;

public class NetWebActivity extends AppCompatActivity {
    //控件对象
    WebView webView;
    //字符串的变量
    String url = "https://baijiahao.baidu.com/s?id=1624512010634951425&wfr=spider&for=pc";
    //JS交互时需要@SuppressLint("JavascriptInterface")
    @SuppressLint("JavascriptInterface")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_net_web);
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });
        //控件对象获取ID
        webView = findViewById(R.id.net_web_id);
        //设置webview的配置
        WebSettings settings = webView.getSettings();
        //是否可以响应JS
        settings.setJavaScriptEnabled(true);
        //是否可以打开文件
        settings.setAllowFileAccess(true);
        //是否可以打开链接
        settings.setAllowFileAccessFromFileURLs(true);
        //设置webView  URL
        webView.loadUrl(url);
        //用setWebViewClient类
        webView.setWebViewClient(new WebViewClient(){
            /**
             * 复写shouldOverrideUrlLoading  使得网页调用webView浏览器
             * false使用webview浏览器true使用设备浏览器
             * @param view The WebView that is initiating the callback.
             * @param request Object containing the details of the request.
             * @return
             */
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                view.loadUrl(url);
                return false;
            }

            /**
             * 复写onPageFinished函数
             * 通知主机应用程序界面已加载完毕
             * 此方法仅对主框架调用 接受onPageFinished回调并不能保证webview绘制的下一帧反映此时的DOM的状态
             * 要通知当时DOM状态已准备好呈现请使用
             * webview.webView.postVisualStateCallback函数请求可视化状态的回调并等待触发提供的回调
             * @param view The WebView that is initiating the callback.
             * @param url The url of the page.
             */
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                //自己定义的函数
                addImageClickListener(view);
            }
        });
        //设置chrome处理程序。这是WebChromeClient的一个实现，用于处理JavaScript对话框、图标标题和进度。这将替换当前的处理程序。
        webView.setWebChromeClient(new WebChromeClient());
        /**
         * JS调用Android的函数
         * 参数1写入Java类对象
         * 参数2自定义的名字比如:niunai JS可以用 window.niunai.函数名来调用Java类中的函数
         */
        webView.addJavascriptInterface(new NetJavaScriptInterface(this),"listener");
    }
    //添加网页当中的图片监听函数
    public  void addImageClickListener(WebView webView){
        /**
         * Android调用JS函数的方法
         * 现写得到为自己定义JS函数
         * 如果网页有你需要得到函数
         * 用javascript:(函数)来调用
         */
        webView.loadUrl("javascript:(function () {\n" +
                "    var objs = document.getElementsByTagName('img');\n" +
                "    console.log(objs);\n" +
                "    var arr = [];\n" +
                "    for (var i = 0; i < objs.length; i++) {\n" +
                "        arr[i] = objs[i].getAttribute('src');\n" +
                "        if (arr[i]) {\n" +
                "            console.log(arr[i]);\n" +
                "        } else {\n" +
                "            alert('图片没有src属性或者图片元素不存在');\n" +
                "        }\n" +
                "    }\n" +
                "    for (var i = 0; i < objs.length; i++) {\n" +
                "        objs[i].onclick = function() {\n" +
                "            window.listener.openImage(arr,this.getAttribute('src'));\n" +
                "        }\n" +
                "    }\n" +
                "})();");
    }
}